
using System;
using System.Data;
using System.Data.SqlClient;
using Csla;
using Csla.Data;
using Csla.Validation;
using SariturIntranetLibrary.Usuarios;
using SariturIntranetLibrary.RM;

namespace SariturIntranetLibrary.Correspondencias
{
    [Serializable()]
    public class CorrespondenciaChildInfo : Csla.ReadOnlyBase<CorrespondenciaChildInfo>
    {

        #region Business Properties and Methods

        //declare members

        private Guid _id = Guid.NewGuid();

        private Guid _usuarioAutor = Guid.Empty;

        private Usuario _usuarioAutorUser;

        private Funcionario _funcionarioAutor;

        private Guid _usuarioDestinatario = Guid.Empty;

        private Usuario _usuarioDestinatarioUser;

        private Funcionario _funcionarioDestinatario;

        private string _protocolo = string.Empty;

        private int _protocoloIndex = 0;

        private SmartDate _dataCriacao = new SmartDate(false);

        private int _tipo = 0;

        private string _descricao = string.Empty;

        private string _localizacao = string.Empty;

        private SmartDate _dataEnviado = new SmartDate(false);

        private SmartDate _dataRecebido = new SmartDate(false);

        private int _estado = 0;

        [System.ComponentModel.DataObjectField(true, false)]
        public Guid Id
        {
            get
            {
                CanReadProperty("Id", true);
                return _id;
            }
        }

        public Guid UsuarioAutor
        {
            get
            {
                CanReadProperty("UsuarioAutor", true);
                return _usuarioAutor;
            }
        }

        public Usuario UsuarioAutorUser
        {
            get
            {
                return _usuarioAutorUser;
            }
        }

        public Funcionario FuncionarioAutor
        {
            get
            {
                return _funcionarioAutor;
            }
        }

        public Guid UsuarioDestinatario
        {
            get
            {
                CanReadProperty("UsuarioDestinatario", true);
                return _usuarioDestinatario;
            }
        }

        public Usuario UsuarioDestinatarioUser
        {
            get
            {
                return _usuarioDestinatarioUser;
            }
        }

        public Funcionario FuncionarioDestinatario
        {
            get
            {
                return _funcionarioDestinatario;
            }
        }

        public string Protocolo
        {
            get
            {
                CanReadProperty("Protocolo", true);
                return _protocolo;
            }
        }

        public int ProtocoloIndex
        {
            get
            {
                CanReadProperty("ProtocoloIndex", true);
                return _protocoloIndex;
            }
        }

        public DateTime DataCriacao
        {
            get
            {
                CanReadProperty("DataCriacao", true);
                return _dataCriacao.Date;
            }
        }

        public string DataCriacaoString
        {
            get
            {
                CanReadProperty("DataCriacaoString", true);
                return _dataCriacao.Text;
            }
        }

        public int Tipo
        {
            get
            {
                CanReadProperty("Tipo", true);
                return _tipo;
            }
        }

        public string Descricao
        {
            get
            {
                CanReadProperty("Descricao", true);
                return _descricao;
            }
        }

        public string Localizacao
        {
            get
            {
                CanReadProperty("Localizacao", true);
                return _localizacao;
            }
        }

        public DateTime DataEnviado
        {
            get
            {
                CanReadProperty("DataEnviado", true);
                return _dataEnviado.Date;
            }
        }

        public string DataEnviadoString
        {
            get
            {
                CanReadProperty("DataEnviadoString", true);
                return _dataEnviado.Text;
            }
        }

        public DateTime DataRecebido
        {
            get
            {
                CanReadProperty("DataRecebido", true);
                return _dataRecebido.Date;
            }
        }

        public string DataRecebidoString
        {
            get
            {
                CanReadProperty("DataRecebidoString", true);
                return _dataRecebido.Text;
            }
        }

        public int Estado
        {
            get
            {
                CanReadProperty("Estado", true);
                return _estado;
            }
        }

        protected override object GetIdValue()
        {
            return _id;
        }

        #endregion //Business Properties and Methods

        #region Authorization Rules
        protected override void AddAuthorizationRules()
        {
            //TODO: Define authorization rules in CorrespondenciaChildInfo
            //AuthorizationRules.AllowRead("Id", "CorrespondenciaChildInfoReadGroup");
            //AuthorizationRules.AllowRead("UsuarioAutor", "CorrespondenciaChildInfoReadGroup");
            //AuthorizationRules.AllowRead("UsuarioDestinatario", "CorrespondenciaChildInfoReadGroup");
            //AuthorizationRules.AllowRead("Protocolo", "CorrespondenciaChildInfoReadGroup");
            //AuthorizationRules.AllowRead("ProtocoloIndex", "CorrespondenciaChildInfoReadGroup");
            //AuthorizationRules.AllowRead("DataCriacao", "CorrespondenciaChildInfoReadGroup");
            //AuthorizationRules.AllowRead("DataCriacaoString", "CorrespondenciaChildInfoReadGroup");
            //AuthorizationRules.AllowRead("Tipo", "CorrespondenciaChildInfoReadGroup");
            //AuthorizationRules.AllowRead("Descricao", "CorrespondenciaChildInfoReadGroup");
            //AuthorizationRules.AllowRead("Localizacao", "CorrespondenciaChildInfoReadGroup");
            //AuthorizationRules.AllowRead("DataEnviado", "CorrespondenciaChildInfoReadGroup");
            //AuthorizationRules.AllowRead("DataEnviadoString", "CorrespondenciaChildInfoReadGroup");
            //AuthorizationRules.AllowRead("DataRecebido", "CorrespondenciaChildInfoReadGroup");
            //AuthorizationRules.AllowRead("DataRecebidoString", "CorrespondenciaChildInfoReadGroup");
            //AuthorizationRules.AllowRead("Estado", "CorrespondenciaChildInfoReadGroup");

        }

        #endregion //Authorization Rules

        #region Factory Methods
        internal static CorrespondenciaChildInfo GetCorrespondenciaChildInfo(SafeDataReader dr)
        {
            return new CorrespondenciaChildInfo(dr);
        }

        private CorrespondenciaChildInfo(SafeDataReader dr)
        {
            Fetch(dr);
        }

        internal void AtualizarObjetos()
        {
            _usuarioAutorUser = Usuario.GetUsuario(_usuarioAutor);
            _funcionarioAutor = Funcionario.GetFuncionario(_usuarioAutorUser.Cpf);
            _usuarioDestinatarioUser = Usuario.GetUsuario(_usuarioDestinatario);
            _funcionarioDestinatario = Funcionario.GetFuncionario(_usuarioDestinatarioUser.Cpf);
        }
        #endregion //Factory Methods


        #region Data Access

        #region Data Access - Fetch
        private void Fetch(SafeDataReader dr)
        {
            FetchObject(dr);

            //load child object(s)
            FetchChildren(dr);

        }

        private void FetchObject(SafeDataReader dr)
        {
            _id = dr.GetGuid("Id");
            _usuarioAutor = dr.GetGuid("UsuarioAutor");
            _usuarioDestinatario = dr.GetGuid("UsuarioDestinatario");
            _protocolo = dr.GetString("Protocolo");
            _protocoloIndex = dr.GetInt32("ProtocoloIndex");
            _dataCriacao = dr.GetSmartDate("DataCriacao", _dataCriacao.EmptyIsMin);
            _tipo = dr.GetInt32("Tipo");
            _descricao = dr.GetString("Descricao");
            _localizacao = dr.GetString("Localizacao");
            _dataEnviado = dr.GetSmartDate("DataEnviado", _dataEnviado.EmptyIsMin);
            _dataRecebido = dr.GetSmartDate("DataRecebido", _dataRecebido.EmptyIsMin);
            _estado = dr.GetInt32("Estado");
        }

        private void FetchChildren(SafeDataReader dr)
        {
        }
        #endregion //Data Access - Fetch
        #endregion //Data Access
    }
}
